package my.design.responsibility;

/**
 * @author zp
 * @version 1.0
 * @description: 抽象处理者
 *
 * 什么是责任链模式：
 * 1、责任链模式定义：为请求创建了一个接受者对象的链。为了避免请求发送者与多个请求处理者耦合在一起，
 * 于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链；当有请求发生时，可将请求沿着这条链传递，
 * 直到有对象处理它为止。
 * 结构：
 * 1、抽象处理者：定义一个处理请求的接口，包含抽象处理方法和一个后继连接。
 * 2、具体处理者：实现抽象处理者的处理方法，该处理方法中会进行判断能够处理本次请求，如果可以则将请求转给其后继者继续执行处理方法。
 * 优缺点：
 *
 * 一、优点：请求的发送者和接受者解耦；可以控制执行顺序；符合开闭原则和单一职责原则。
 * 二、缺点：对比较长的职责链，请求处理可能会涉及多个处理对象，性能会受到影响；增加了客户端的复杂性，
 * 可能会造成循环调用。
 * 三、应用场景：
 * Tomcat中的过滤器链使用到了责任链模式，其中ApplicationFilterChain类实现了FilterChain接口，
 * 其底层实现使用的是数组，关键方式是doFilter()及internalDoFilter()方法。
 *
 * @date 2022/11/2 18:46
 */
public abstract class Handler {

    private Handler next;

    public Handler(Handler handler){
        this.next = handler;
    }

    public Handler getNext() {
        return next;
    }

    public void setNext(Handler next) {
        this.next = next;
    }

    abstract boolean process(Request request);

}

